import numpy as np
import matplotlib.pyplot as plt

# 1. 生成自变量 x
# 取区间 [-2π, 2π]，使用 1000 个点保证曲线平滑
x = np.linspace(-2 * np.pi, 2 * np.pi, 1000)

# 2. 计算函数值
y_sin = np.sin(x)                         # 原函数 sin(x)
y_pade = x / (1 + x**2 / 6)               # 2/2 阶 Padé 逼近

# 3. 绘制对比图
plt.figure(figsize=(10, 6))

# sin(x) – 蓝色实线
plt.plot(x, y_sin,
         label='sin(x)',
         color='blue',
         linewidth=2)

# Padé 逼近 – 红色虚线
plt.plot(x, y_pade,
         label=r'$R_{2,2}(x)=\frac{x}{1+x^{2}/6}$',
         color='red',
         linestyle='--',
         linewidth=2)

# 4. 图形美化
plt.title('sin(x) 与 2/2 阶 Padé 逼近 R_{2,2}(x) 的对比')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.grid(True)

# 设定坐标轴范围（可根据需要自行调整）
plt.xlim(-2 * np.pi, 2 * np.pi)
plt.ylim(-1.5, 1.5)

# 5.（可选）在图中标注逼近效果
# 在靠近 0 的位置添加文字说明
plt.annotate('逼近效果好',
             xy=(0, 0),
             xytext=(-2, 0.8),
             arrowprops=dict(arrowstyle='->', color='green'))

# 在远离 0 的位置标注误差增大
plt.annotate('误差增大',
             xy=(3, 0.5),
             xytext=(4, 1.0),
             arrowprops=dict(arrowstyle='->', color='orange'))

plt.show()
